package org.doubango.utils

import android.media.AudioFormat
import android.media.AudioRecord

import android.media.MediaRecorder
import com.evendai.loglibrary.Timber
import java.lang.Exception


class MediaUtil {

    companion object {

        /** 判断麦克风是有效，有效返回true，否则返回false */
        fun validateMicAvailability(): Boolean {
            var available = false
            val recorder = AudioRecord(
                MediaRecorder.AudioSource.MIC, 44100,
                AudioFormat.CHANNEL_IN_MONO,
                AudioFormat.ENCODING_DEFAULT, 44100
            )
            try {
                Timber.i("麦克风当前状态：${recorder.recordingState}")
                // 使用MediaRecorder正在录音时，调用此方法发现状态也是停止状态，所以这个状态不可信，具体还是要看能否启动录音来判断
                /*if (recorder.recordingState == AudioRecord.RECORDSTATE_STOPPED) {
                    Timber.i("麦克风状态是停止状态")
                } else {
                    Timber.i("麦克风状态不是停止状态")
                }*/

                recorder.startRecording() // 即使麦克风被占用，这里调用也不会抛异常。但如果没被占用，则录制状态会变成AudioRecord.RECORDSTATE_RECORDING
                Timber.i("调用录制后麦克风当前状态：${recorder.recordingState}")
                if (recorder.recordingState == AudioRecord.RECORDSTATE_RECORDING) {
                    available = true
                    Timber.i("麦克风开始录制，没有被占用")
                } else {
                    Timber.i("麦克风没有开始录制，说明被占用")
                    // TODO 写文件记录
                }
            } catch (e: Exception) {
                Timber.e(e, "发生异常了，应该是麦克风被占用了")
                // TODO 写文件记录
            } finally {
                recorder.release()
            }
            return available
        }
    }

}